package update

import (
	"io"

	"gitee.com/go_888/update/internal/go-update/internal/binarydist"
)

// Patcher 定义了一个接口，用于将二进制补丁应用到旧项目上以获取更新后的项目。 md5:dfd9d7feca793a65
type Patcher interface {
	Patch(old io.Reader, new io.Writer, patch io.Reader) error
}

type patchFn func(io.Reader, io.Writer, io.Reader) error

func (fn patchFn) Patch(old io.Reader, new io.Writer, patch io.Reader) error {
	return fn(old, new, patch)
}

// NewBSDifferPatcher 返回一个新的 Patcher，该 Patcher 使用 bsdiff 算法应用二进制补丁。详情请参见：http://www.daemonology.net/bsdiff/
// md5:8a6c73f0aa1be44b
func NewBSDiffPatcher() Patcher {
	return patchFn(binarydist.Patch)
}
